Õppige sisuturvapoliitikat (CSP), et tugevdada oma esirakendusi saidiüleste skriptimisrünnete (XSS) vastu. Avastage täiustatud tehnikad kindla kaitse ja globaalse rakendusturvalisuse tagamiseks.
Esirakenduse sisuturvapoliitika: täiustatud XSS-kaitse
Tänapäeva omavahel ühendatud maailmas on veebirakenduste turvalisus esmatähtis. Saidiülesed skriptimisrünnakud (XSS) on jätkuv oht, mis võimaldab ründajatel süstida pahatahtlikke skripte veebisaitidele, mida teised kasutajad vaatavad. Üks tõhusamaid relvi teie arsenalis XSS-i vastu on sisuturvapoliitika (CSP). See juhend süveneb täiustatud CSP tehnikatesse, et pakkuda teie esirakendustele kindlat kaitset, tagades turvalisema sirvimiskogemuse kasutajatele üle maailma.
Sisuturvapoliitika (CSP) mõistmine
Sisuturvapoliitika (CSP) on HTTP vastusepäis, mis võimaldab teil kontrollida, milliseid ressursse veebilehel on lubatud laadida. Määratledes CSP, annate brauserile teada, milliseid päritolusid (domeenid, protokollid ja pordid) peetakse turvalisteks sisuallikateks, näiteks skriptide, stiililehtede, piltide ja fontide jaoks. Kui brauser kohtab ressurssi, mis rikub CSP-d, blokeerib see ressursi, leevendades XSS-i ja muude koodisüstimise rünnakute riski.
Peamised CSP direktiivid
CSP toimib läbi direktiivide kogumi, millest igaüks kontrollib ressursside laadimise erinevat aspekti. Nende direktiivide mõistmine on tõhusa CSP rakendamiseks ülioluline. Siin on mõned kõige olulisemad:
default-src: See on tagavaradirektiiv kõikidele ressursitüüpidele, millel pole konkreetset direktiivi määratud. Üldiselt on hea tava seada see väärtusele 'none', et vaikimisi kõik blokeerida ja seejärel konkreetsed allikad selgesõnaliselt lubada.script-src: See direktiiv kontrollib allikaid, kust JavaScripti saab käivitada. See on vaieldamatult kõige olulisem direktiiv XSS-rünnakute ennetamiseks.style-src: See direktiiv kontrollib allikaid, kust stiililehti (CSS) saab laadida.img-src: See direktiiv kontrollib allikaid, kust pilte saab laadida.font-src: See direktiiv kontrollib allikaid, kust fonte saab laadida.connect-src: See direktiiv kontrollib sihtkohti, kuhu veebileht saab teha võrgupäringuid (nt AJAX-kutsed, WebSockets).media-src: See direktiiv kontrollib allikaid, kust meediat (heli ja videot) saab laadida.object-src: See direktiiv kontrollib allikaid, kust pistikprogramme (nt Flash) saab laadida.frame-src/child-src: (child-srcon eelistatud) Need direktiivid kontrollivad allikaid, kust raame (<iframe>) saab laadida.frame-srcon vananenud ja selle asemel tuleks kasutada direktiivichild-src.form-action: See direktiiv kontrollib URL-e, kuhu vormide esitamine on lubatud.
Levinud CSP väärtused
Igas direktiivis saate lubatud allikad määrata erinevate väärtuste abil:
'none': Blokeerib kõik seda tüüpi ressursid. See on sageli turvalise CSP lähtepunkt.'self': Lubab ressursse samast päritolust (skeem, domeen ja port) kui leht ise.'unsafe-inline': Lubab tekstisisest JavaScripti (nt sündmuste käsitlejaid naguonclick) ja tekstisisest CSS-i. See on turvariskide tõttu üldiselt mittesoovitatav.'unsafe-eval': Lubab kasutada ebaturvalisi JavaScripti funktsioone nagueval(),new Function()jasetTimeout()koos stringargumendiga. See on rangelt mittesoovitatav.data:: Lubab laadida ressursse andme-URI-dest (nt otse HTML-i manustatud pildid).*: Lubab kõiki allikaid. Kasutage seda säästlikult, kui üldse, kuna see piirab oluliselt CSP tõhusust.- URL-id (nt
https://example.com,https://*.example.com): Lubab ressursse määratud URL-idelt. Alamdomeenide jaoks saab kasutada metamärke (*). nonce-value: Lubab tekstisiseseid skripte või stiile, millel on konkreetne nonce-atribuut. See on soovitatav lähenemisviis tekstisisese JavaScripti lubamiseks, kui see on absoluutselt vajalik. (Vt jaotist 'Noncesid ja räsid').sha256-hashvalue,sha384-hashvalue,sha512-hashvalue: Lubab tekstisiseseid skripte või stiile, mille sisu vastab konkreetsele krüptograafilisele räsile. (Vt jaotist 'Noncesid ja räsid').
Kindla CSP rakendamine
Tugeva CSP rakendamine hõlmab hoolikat planeerimist ja teostamist. Siin on samm-sammuline juhend:
1. Hindamine ja planeerimine
Enne alustamist peate mõistma, kuidas teie rakendus töötab. Tuvastage kõik ressursid, mida teie rakendus laadib, sealhulgas skriptid, stiililehed, pildid, fondid ja kõik välised teenused, millega see suhtleb. Kaaluge oma rakenduse arhitektuuri ja andmete liikumist selles. Rakenduse ressursside laadimiskäitumise põhjalik dokumenteerimine on hädavajalik.
Näide: Globaalne e-kaubanduse platvorm võib laadida skripte oma domeenist (nt www.example.com), sisuedastusvõrkudest (CDN) nagu Cloudflare või Akamai ning potentsiaalselt kolmandate osapoolte teenustest analüütika või maksete töötlemiseks. Plaan peab arvestama kõigi nende allikatega, isegi nendega, mis pärinevad erinevatest riikidest või piirkondadest.
2. Alustamine piirava poliitikaga (vaikimisi 'none')
Parim tava on alustada väga piirava poliitikaga ja seda järk-järgult vastavalt vajadusele leevendada. Alustage direktiiviga default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self';. See poliitika blokeerib vaikimisi kõik ja lubab skripte, stiile ja pilte laadida ainult samast päritolust. See tagab kohe tugeva baaskaitse taseme.
Näide:
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self';
3. Väliste ressursside tuvastamine
Järgmisena tuvastage kõik välised ressursid, mida teie rakendus kasutab. See hõlmab CDN-e, kolmandate osapoolte API-sid ja muid domeene, kust teie rakendus varasid laadib. Vaadake üle oma HTML-i lähtekood ja võrguliiklus, et avastada kõik välised sõltuvused.
Näide: Teie rakendus võib kasutada Google Fontsi, CDN-is majutatud JavaScripti teeki ja makselüüsi API-d. Dokumenteerige need välised allikad koos kasutatavate konkreetsete protokollide ja portidega.
4. Poliitika järkjärguline leevendamine
Iga välise ressursi jaoks lisage oma CSP-sse vastav direktiiv ja allikas. Näiteks kui kasutate CDN-i, lubage see CDN oma script-src ja/või style-src direktiivides. Olge nii täpne kui võimalik. Vältige metamärkide kasutamist, kui see pole vajalik. Testige oma rakendust põhjalikult pärast iga muudatust, et tagada selle korrektne toimimine ja CSP tõhus pahatahtlike ressursside blokeerimine.
Näide: Kui teie rakendus kasutab Google Fontsi, võite oma CSP-sse lisada font-src https://fonts.gstatic.com; ja style-src https://fonts.googleapis.com;. Kui kasutate CDN-i, näiteks cdn.example.com, siis lisage script-src cdn.example.com; style-src cdn.example.com;.
5. Kasutuselevõtt ja testimine
Kui olete oma CSP kehtestanud, võtke see oma tootmiskeskkonnas kasutusele. Testige seda põhjalikult erinevates brauserites ja seadmetes. Kasutage rikkumiste tuvastamiseks brauseri arendaja tööriistu ja turvatestimise tööriistu. Auditeerige ja värskendage oma CSP-d regulaarselt vastavalt rakenduse arengule.
6. Rikkumiste jälgimine
Rakendage mehhanism CSP rikkumiste jälgimiseks. Kui brauser blokeerib ressursi CSP rikkumise tõttu, saadab see aruande, mida saate analüüsida. Selle aruandluse saate seadistada direktiivide report-uri või report-to abil.
report-uri: See direktiiv määrab URL-i, kuhu brauser peaks saatma aruandeid CSP rikkumise korral. See direktiiv on nüüdseks vananenud ja selle asemel tuleks kasutada direktiivi report-to.
report-to: See direktiiv määrab aruandluse lõpp-punktide loendi, kuhu brauser peaks aruandeid saatma. See võimaldab aruannete käsitlemisel suuremat paindlikkust ja on tänapäevane soovitatav lähenemisviis.
Näide (report-to):
Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; report-to csp-reports;
Teil on vaja ka aruandluse lõpp-punkti serverit, et rikkumisaruandeid vastu võtta ja töödelda. Selleks on saadaval mitmeid avatud lähtekoodiga ja kommertstööriistu, nagu Sentry, Report URI ja Cloudflare'i Security Analytics. Need tööriistad saavad koondada, analüüsida ja teavitada teid potentsiaalsetest turvaprobleemidest.
Täiustatud CSP tehnikad XSS-kaitseks
Lisaks põhilistele CSP direktiividele on mitmeid täiustatud tehnikaid, mis võivad teie XSS-kaitset märkimisväärselt parandada:
1. Noncesid ja räsid
Noncesid ja räsid on soovitatavad meetodid tekstisisese JavaScripti ja CSS-i lubamiseks. Väärtuse 'unsafe-inline' kasutamine on rangelt mittesoovitatav, kuna see avab teie rakenduse olulistele haavatavustele.
Nonces: Nonce (number used once) on juhuslikult genereeritud unikaalne string, mis on määratud igale tekstisisesele skripti- või stiiliplokile. Seejärel lubab CSP nende konkreetsete skriptide või stiilide käivitamise. See lähenemine on oluliselt turvalisem kui 'unsafe-inline'.
Rakendamine noncesidega:
- Genereerige iga päringu jaoks unikaalne nonce-väärtus (nt kasutades serveripoolset keelt nagu PHP, Python, Node.js).
- Lisage nonce-atribuut oma tekstisisesetele
<script>ja<style>siltidele. Näiteks:<script nonce="{{ nonce }}">...</script> - Lisage nonce-väärtus oma CSP
script-srcjastyle-srcdirektiividesse:script-src 'self' 'nonce-{{ nonce }}'; style-src 'self' 'nonce-{{ nonce }}';
Räsid: Tekstisiseste skriptide või stiilide lubamiseks võite kasutada ka räsisid (SHA-256, SHA-384 või SHA-512). CSP sisaldab tekstisisese koodi räsi. See meetod sobib, kui teil on piiratud arv tekstisiseseid skripte või stiile, mis ei muutu sageli.
Rakendamine räsidega:
- Arvutage oma tekstisisese skripti või stiilikoodi SHA-256, SHA-384 või SHA-512 räsi.
- Lisage räsi oma
script-srcvõistyle-srcdirektiivi. Näiteks:script-src 'self' 'sha256-yourhashvalue';
Näide (PHP noncesidega):
<?php
$nonce = bin2hex(random_bytes(16)); // Genereeri juhuslik nonce
header("Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{$nonce}'; style-src 'self' 'nonce-{$nonce}';");
?>
<script nonce="">
// Teie tekstisisene JavaScripti kood
</script>
2. Strict-Dynamic
Allikaväärtus 'strict-dynamic' on täiustatum lähenemine. See võimaldab skriptidel dünaamiliselt teisi skripte laadida, tingimusel et algne skript, mis teisi skripte laadib, on lubatud. See võib olla kasulik raamistikele ja teekidele, mis laadivad skripte dünaamiliselt. Kasutage seda ettevaatlikult ja ainult siis, kui mõistate täielikult selle tagajärgi.
Kuidas see töötab: Kui 'strict-dynamic' kasutatakse koos direktiiviga script-src, usaldab brauser skripte, mis on laaditud usaldusväärse skripti kaudu. Kõik skriptid, mis on dünaamiliselt lisatud usaldusväärse skripti poolt, on samuti lubatud. Algne usaldusväärne skript tuleb laadida teise mehhanismi kaudu, näiteks nonce'i või räsiga.
Näide:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{{ nonce }}' 'strict-dynamic';
Selles näites usaldatakse esialgu ainult nonce'iga skripti. Kuid kõik skriptid, mida see skript dünaamiliselt laadib, on samuti usaldusväärsed.
3. Trusted Types
Trusted Types on brauseri funktsioon, mis võimaldab teil vältida DOM-põhiseid XSS-rünnakuid, jõustades range API potentsiaalselt ohtlike andmete loomiseks ja käsitlemiseks. See asendab võime luua HTML-i otse stringidest. See nõuab, et te muudaksite ebaturvalised stringid 'usaldusväärseteks' objektideks, kasutades 'puhastajaid'. See kaitseb DOM-põhiste XSS-haavatavuste eest raamistikes ja teekides.
Kuidas Trusted Types töötab:
- Määratlege poliitika.
- Registreerige poliitikad konkreetsete toimingute jaoks (nt `innerHTML`).
- Kasutage andmete puhastamiseks enne nende DOM-i omadusele määramist puhastajat.
Näide (kontseptuaalne):
// Looge TrustedType poliitika
const policy = trustedTypes.createPolicy('myPolicy', {
createHTML: (string) => { //Puhastaja. Tagastage trustedHTML objekt.
// Puhastage HTML-string enne usaldusväärse tüübi tagastamist
return string;
}
});
// Kasutage poliitikat innerHTML-i seadistamiseks
document.body.innerHTML = policy.createHTML("<img src='x' onerror='alert(1)'>");
Praegu on Trusted Types'i brauseritugi suhteliselt piiratud, kuid see on tõhus kaitsemeede DOM-põhiste XSS-rünnakute vastu, kui seda õigesti kasutada. Trusted types'i rakendamine võib oluliselt vähendada rünnakupinda.
4. Rikkumistest teavitamine (report-to / report-uri)
Nõuetekohase rikkumistest teavitamise seadistamine on teie CSP jälgimiseks ja hooldamiseks hädavajalik. Kasutage direktiivi report-to (eelistatud) või report-uri, et saata rikkumisaruandeid teie kontrolli all olevale lõpp-punktile. Need aruanded annavad väärtuslikku teavet potentsiaalsete XSS-rünnakute ja valesti seadistuste kohta.
Kuidas aruandlust kasutada:
- Määrake
report-tovõireport-uridirektiiv.report-to: on eelistatud lähenemisviis. Määrake lõpp-punkt, kuhu rikkumisaruanded saadetakse.report-uri: on vananenud meetod, see määrab aruandluse lõpp-punkti URL-i.
- Määrake
Content-Security-Policy-Report-OnlyHTTP päis (või samaväärne metasilt): Kasutage seda päist esialgu rikkumiste jälgimiseks ilma ressursse blokeerimata. See võimaldab teil tuvastada ja parandada probleeme enne CSP jõustamist oma tootmiskeskkonnas. - Looge aruandluse lõpp-punkt. Saate luua lihtsa serveripoolse rakenduse (nt kasutades Node.js, Pythoni või PHP-d), et aruandeid vastu võtta ja töödelda. Või kasutage jälgimiseks kolmanda osapoole teenust.
- AnalĂĽĂĽsige aruandeid. Uurige rikkumise ĂĽksikasju, sealhulgas blokeeritud URI-d, rikutud direktiivi ja skripti allikat. See teave aitab teil tuvastada ja parandada XSS-haavatavusi ja valesti seadistusi.
5. CSP metasiltides (ainult aruandlus ja jõustamine)
CSP-d saab edastada kahel viisil: HTTP päisena või <meta> sildina teie HTML-is.
- HTTP päis: Soovitatav meetod, CSP edastamine HTTP päisena, on üldiselt turvalisem, kuna see rakendatakse enne lehe sisu parsimist. See hoiab ära võimalikud möödahiilimised, mis on võimalikud
<meta>siltidega. <meta>silt: Saate CSP lisada ka kasutades<meta>silti oma HTML-i<head>jaotises. Atribuuthttp-equivmäärab poliitika tüübi. Näiteks:<meta http-equiv="Content-Security-Policy" content="...">.
<meta> silt pakub atribuuti `Content-Security-Policy-Report-Only`, et rakendada CSP-d ainult aruandlusrežiimis. See võimaldab teil jälgida rikkumisi ilma midagi blokeerimata.
Ainult aruandlusrežiim (soovitatav esialgseks kasutuselevõtuks):
<meta http-equiv="Content-Security-Policy-Report-Only" content="default-src 'self'; script-src 'self' https://example.com; report-to csp-reports;">
See režiim võimaldab teil koguda rikkumisaruandeid, mõjutamata teie veebisaidi funktsionaalsust. Saate seda kasutada oma CSP testimiseks ja probleemide tuvastamiseks enne selle jõustamist tootmises. Vaadake rikkumisaruanded üle, kohandage oma CSP-d vastavalt vajadusele ja seejärel lülituge jõustamiseks `Content-Security-Policy` päise peale.
6. CSP koos veebirakenduste tulemĂĽĂĽridega (WAF)
Veebirakenduste tulemüür (WAF) pakub teie veebirakendustele täiendava turvakihi. WAF-e saab kasutada pahatahtliku liikluse, sealhulgas XSS-rünnakute tuvastamiseks ja blokeerimiseks. Saate oma WAF-i seadistada töötama koos oma CSP-ga, et parandada oma turvalisust.
Kuidas WAF ja CSP saavad koos töötada:
- WAF esimese kaitseliinina: WAF suudab filtreerida pahatahtlikud päringud enne, kui need teie rakenduseni jõuavad. See suudab tuvastada ja blokeerida tuntud XSS-rünnakute mustreid.
- CSP teise kaitseliinina: CSP pakub täiendava kaitsekihi, piirates, milliseid ressursse leht saab laadida, isegi kui pahatahtlik sisu suudab WAF-ist mööda pääseda.
- Integratsioon CSP aruannetega: Mõned WAF-id saavad integreeruda CSP rikkumisaruannetega. Nad saavad teid hoiatada potentsiaalsete rünnakute eest ja pakkuda üksikasjalikku teavet rünnaku olemuse kohta.
Parimad praktikad ja praktilised nõuanded
- Alustage piiravalt: Alustage väga piirava CSP-ga (nt
default-src 'none';). See minimeerib rünnakupinda. - Testige põhjalikult: Testige oma CSP-d rangelt kõigis suuremates brauserites ja erinevates seadmetes enne tootmisesse viimist. Kasutage nii käsitsi kui ka automatiseeritud testimisvahendeid.
- Jälgige rikkumisi: Jälgige ja analüüsige regulaarselt CSP rikkumisaruandeid, et tuvastada ja lahendada turvaprobleeme. Seadistage automaatsed teavitused, et teid potentsiaalsetest rünnakutest teavitataks.
- Hoidke seda ajakohasena: Kui teie rakendus areneb, värskendage oma CSP-d, et kajastada muudatusi teie ressursside laadimismustrites. Olge kursis turvalisuse parimate tavadega.
- Vältige väärtusi 'unsafe-inline' ja 'unsafe-eval': Need väärtused nõrgestavad oluliselt teie CSP-d ja neid tuleks vältida. Kasutage alati noncesid või räsisid tekstisiseste skriptide/stiilide jaoks.
- Kasutage esialgu ainult aruandlusrežiimi: Uue CSP kasutuselevõtmisel või oluliste muudatuste tegemisel kasutage ainult aruandlusrežiimi, et testida poliitikat ja tuvastada potentsiaalseid probleeme enne selle jõustamist.
- Kaaluge kolmandate osapoolte teenuseid: Kasutage teenuseid (nagu Sentry, Report URI või Cloudflare), et aidata CSP aruandluse ja analüüsiga. See võib protsessi lihtsustada ja pakkuda väärtuslikku teavet.
- Harige oma meeskonda: Veenduge, et teie arendusmeeskond mõistab CSP olulisust ja järgib turvalisi kodeerimistavasid, et minimeerida XSS-haavatavuste riski. Koolitage oma arendajaid turvaliste kodeerimistavade ja XSS-i ennetamise tehnikate osas.
- Rakendage turvaauditeid: Tehke regulaarselt turvaauditeid, et tuvastada haavatavusi ja hinnata oma CSP tõhusust.
- Kasutage automatiseerimist: Automatiseerige nonceside ja räside genereerimise protsess. Integreerige CSP testimine oma CI/CD konveieri.
Globaalsed kaalutlused
Globaalsele publikule CSP rakendamisel arvestage järgmisega:
- Jõudlus: Minimeerige CSP mõju veebisaidi jõudlusele. Kasutage tõhusaid ressursside laadimise tehnikaid ja optimeerige oma CSP-d, et vältida tarbetuid piiranguid. Valige varade jaoks geograafiliselt hajutatud CDN-id.
- Lokaliseerimine: Veenduge, et teie CSP ei segaks lokaliseeritud sisu ega ressursse. Näiteks kui kasutate tõlgitud sisu jaoks CDN-i, veenduge, et lisate selle CDN-i oma CSP-sse.
- Juurdepääsetavus: Testige oma CSP-d, et veenduda, et see ei mõjuta negatiivselt puuetega kasutajate juurdepääsetavust.
- Piirkondlikud regulatsioonid: Olge teadlik andmekaitse-eeskirjadest erinevates piirkondades. Näiteks Euroopa Liidu isikuandmete kaitse üldmäärus (GDPR) ja Ameerika Ühendriikide California tarbijate eraelu puutumatuse seadus (CCPA) võivad mõjutada seda, kuidas te kogute ja töötlete kasutajaandmeid, mis võib mõjutada teie CSP konfiguratsiooni.
- Mobiilikasutajad: Testige oma CSP-d mobiilseadmetes ja -brauserites, et tagada piisav kaitse ja mitte takistada mobiilikasutaja kogemust. Mobiilseadmed ja -brauserid käsitlevad CSP-d sageli veidi erinevalt, seega on põhjalik testimine ülioluline.
Kokkuvõte
Täiustatud sisuturvapoliitika rakendamine on kriitiline samm teie veebirakenduste kaitsmisel XSS-rünnakute eest. Alustades piirava poliitikaga, seadistades hoolikalt direktiive ja kasutades tehnikaid nagu nonces, räsid ja aruandlus, saate oluliselt vähendada oma rünnakupinda ja suurendada oma globaalse veebikohalolu turvalisust. Ärge unustage oma CSP-d põhjalikult testida, jälgida rikkumisi ja pidevalt värskendada oma poliitikat vastavalt rakenduse arengule. Nende parimate tavade omaksvõtmisega saate kaitsta oma kasutajaid ja säilitada usalduse oma brändi vastu, olenemata nende asukohast või taustast.